/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tp2.etna.exportacion.dao;

import com.tp2.etna.exportacion.modelo.DetalleDocumentoExportacionModel;
import com.tp2.etna.exportacion.modelo.DocumentoExportacionModel;
import com.tp2.etna.exportacion.modelo.DocumentoSicexModel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class DetalleDocumentoExportacionDAOImpl implements
        DetalleDocumentoExportacionDAO {

    @Autowired
    private DataSource dataSource;

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public List<DetalleDocumentoExportacionModel> listarDocumentosAsociados(Integer codigoRequerimientoDet) {
        List<DetalleDocumentoExportacionModel> detallereq = new ArrayList<DetalleDocumentoExportacionModel>();
        String query = "select 	b.Codigo, b.CodigoDocumentoExportacion, b.codigoDocumentoSICEX, a.CodigoRequerimientoDet, c.Descripcion, "
                + " b.FlagAprobado, c.RutaDoc "
                + " from documentoexportacion a inner join detalledocumentoexportacion b "
                + " on a.Codigo = b.CodigoDocumentoExportacion inner join documentosicex c "
                + " on b.CodigoDocumentoSICEX = c.Codigo "
                + " where a.CodigoRequerimientoDet = ?;";

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);
            ps.setInt(1, codigoRequerimientoDet);
            rs = ps.executeQuery();
            while (rs.next()) {
                DetalleDocumentoExportacionModel itm = new DetalleDocumentoExportacionModel();
                itm.setCodigo(rs.getInt("Codigo"));
                itm.setCodigoDocumentoSicex(rs.getInt("CodigoDocumentoSICEX"));
                itm.setCodigoDocumentoExportacion(rs.getInt("CodigoDocumentoExportacion"));
                itm.setFlagAprobado(rs.getInt("FlagAprobado"));

                DocumentoExportacionModel documentoExportacion = new DocumentoExportacionModel();
                documentoExportacion.setCodigoRequerimientoDet(rs.getInt("CodigoRequerimientoDet"));

                DocumentoSicexModel documentoSicex = new DocumentoSicexModel();
                documentoSicex.setDescripcion(rs.getString("Descripcion"));
                documentoSicex.setRutaDoc(rs.getString("RutaDoc"));

                itm.setDocumentoExportacion(documentoExportacion);
                itm.setDocumentoSicex(documentoSicex);

                detallereq.add(itm);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return detallereq;
    }

    @Override
    public Boolean ActualizarFlagDetalleDocumentoExportacion(Integer codigo, Integer flgaprobar) {
        String query = "update detalledocumentoexportacion set flagaprobado = ? "
                + " where codigo = ?;";

        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = dataSource.getConnection();
            
            ps = con.prepareStatement(query);
            ps.setInt(1, flgaprobar);
            ps.setInt(2, codigo);
            
            int out = ps.executeUpdate();
            if (out != 0) {
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

}
